package SistemaDeArchivos;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

import org.joda.time.DateTime;

public class Directorio implements FyleSystem {

	private List<FyleSystem> subDirectorios;
	private DateTime makeTime;
	private String name;

	public Directorio(String name, List<FyleSystem> listaDeArchivos) {

		this.name = name;
		this.makeTime = DateTime.now();
		this.subDirectorios = listaDeArchivos;

	}

	public Directorio(String name, FyleSystem unArchivo) {

		this.name = name;
		this.makeTime = DateTime.now();
		this.subDirectorios = new ArrayList<FyleSystem>();
		this.subDirectorios.add(unArchivo);

	}

	public String name() {

		return name;
	}

	@Override
	public int totalSize() {
		Integer sizeResult = 0;

		for (FyleSystem iterableFyleSystem : this.subDirectorios) {

			sizeResult = sizeResult + iterableFyleSystem.totalSize();

		}
		return sizeResult;
	}

	@Override
	public void printStructure() {

		System.out.println(this.name);
		for (FyleSystem iterableFyleSystem : this.subDirectorios) {

			System.out.print("//");
			iterableFyleSystem.printStructure();
		}
	}

	@Override
	public FyleSystem lastModified() {

		FSComparator matcher = new FSComparator();
		List<FyleSystem> ultimosModificados = new ArrayList<FyleSystem>();

		for (FyleSystem iterableFyle : this.subDirectorios) {

			ultimosModificados.add(iterableFyle.lastModified());
		}

		return Collections.max(ultimosModificados, matcher);

	}

	@Override
	public FyleSystem oldestElement() {

		FSComparator matcher = new FSComparator();
		List<FyleSystem> elMasViejo = new ArrayList<FyleSystem>();

		for (FyleSystem iterableFyle : this.subDirectorios) {

			elMasViejo.add(iterableFyle.oldestElement());
		}

		return Collections.min(elMasViejo, matcher);
	}

	@Override
	public DateTime lastModification() {

		return this.makeTime;
	}

	public void addFyleSystem(FyleSystem unFyleSystem) {

		this.subDirectorios.add(unFyleSystem);
	}

	public static void main(String[] args) {

		List<FyleSystem> archivos = new ArrayList<FyleSystem>();
		List<FyleSystem> archivos2 = new ArrayList<FyleSystem>();

		FyleSystem archivo1 = new Archivo("java1");
		FyleSystem archivo2 = new Archivo("java2");
		FyleSystem archivo3 = new Archivo("java3");
		FyleSystem archivo4 = new Archivo("java4");

		archivos2.add(archivo1);
		archivos2.add(archivo2);

		FyleSystem carpetaHija = new Directorio("carpeta2", archivos2);

		archivos.add(archivo1);
		archivos.add(archivo2);
		archivos.add(archivo3);
		archivos.add(archivo4);
		archivos.add(carpetaHija);

		FyleSystem carpetaMadre = new Directorio("carpeta1", archivos);

		carpetaMadre.printStructure();

	}

}
